package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

import lombok.Data;

/**
 * @desc AccountSubjectDto
 * @使用场景
 */
@Data
public class AccountSubjectDto extends BaseDto implements Serializable {

  /**
   * 科目ID
   */
  @ApiModelProperty("科目ID")
  private String accountSubjectld;

  /**
   * 科目标识
   */
  @ApiModelProperty("科目标识")
  private String accountSubjectCode;

  /**
   * 科目名称
   */
  @ApiModelProperty("科目名称")
  private String accountSubjectName;

  /**
   * 科目类型 NATIONAL_STANDARD:国家标准 DEPT_ORG_STANDARD:部门组织标准 CONTNET_STANDARD:内容标准
   */
  @ApiModelProperty("科目类型")
  private String accountSubjectType;

  /**
   * 收支类型 INCOME:收入 SPENDING:支出
   */
  @ApiModelProperty("收支类型")
  private String incomeExpensesType;

  /**
   * 科目类别编码 BUDEGT_ACCOUNT_CLASS:预算账户类别 ENTITY_ACCOUNT_CLASS:实体账户类别 SYSTEM_CLASS:系统类别
   */
  @ApiModelProperty("科目类别编码")
  private String accountSubjectClassCode;

  /**
   * 行为类型编码 ADD_STAFF:添加员工 GENERATE_NAME:生成名称 RETRIEVE_PASSWORD:找回密码 RESET_PASSWORD:修改密码 LOGIN:验证码登录 ADD_ADMIN:添加空间管理员 PERFECT_INFO:完善资料 BIND_MOBILE:绑定手机号 CHANGE_MOBILE:换绑手机 ADD_BUDGET:加预算 SUB_BUDGET:减预算 BUDGET_ARRIVAL:预算到账 ISSUE_OFFCIAL_DOC:公文下发 GENERATE_TO_BE_SIGNED_WORK_TASK_MSG_TEMP:工作任务待签收 SUPERVISE_TASK_ARRANGE:任务安排督办 Q_AND_A_MESSAGE_TEMPLATE:内容智能回答 THIRD_QA_SESSION_MESSAGE_TEMPLATE:独立三方智能问答 COMMENT_MESSAGE_TEMPLATE:内容评论消息 CHANNEL_MESSAGE_TEMPLATE:通道内发消息 WORK_SUMMARY_MESSAGE_TEMPLATE:提交工作总结 PROBLEM_SUMMARY_MESSAGE_TEMPLATE:提交问题总结 SOLUTION_IDEAS_MESSAGE_TEMPLATE:提交解决思路 IMPROVEMENT_SUGGESTIONS_MESSAGE_TEMPLATE:提交改进建议 NEW_REPORT_TASK_MSG_TEMP:新汇报任务 REPORT_TASK_WILL_OVERDUE_MSG_TEMP:汇报即将逾期 REPORT_TASK_OVERDUE_MSG_TEMP:汇报已逾期 NEW_TARGET_ARRANGE_MSG_TEMP:新目标安排 REPORT_TASK_REMIND_MSG_TEMP:汇报提醒 UPDATE_TARGET_VALUE_MSG_TEMP:修改目标值 REPORT_TASK_TO_BE_EVALUATEED_MSG_TEMP:汇报待评价 REPORT_TASK_TO_BE_EXAMINE_MSG_TEMP:汇报待审核 REPORT_TASK_REJECT_MSG_TEMP:汇报审核驳回 URGE_TARGET_ARRANGE_MSG_TEMP:目标安排督办 MID_BASIC_URGE_TARGET_ARRANGE_MSG_TEMP:部门目标安排督办
   */
  @ApiModelProperty("行为类型编码")
  private String behaviorTypeCode;

  /**
   * 是否组织正式财务标准 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否组织正式财务标准")
  private String isOrgOfficialAccountNom;

  /**
   * 是否资金指标 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否资金指标")
  private String isFundsIndex;

  /**
   * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
   */
  @ApiModelProperty("主体生命周期")
  private String subjectLifeCycle;

  /**
   * 操作人就职记录ID
   */
  @ApiModelProperty("操作人就职记录ID")
  private String operationInductionId;

  /**
   * 操作时间
   */
  @ApiModelProperty("操作时间")
  private Date operateTime;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    AccountSubjectDto that = (AccountSubjectDto) o;
    return (
      accountSubjectld == that.accountSubjectld &&
      accountSubjectCode == that.accountSubjectCode &&
      accountSubjectName == that.accountSubjectName &&
      accountSubjectType == that.accountSubjectType &&
      incomeExpensesType == that.incomeExpensesType &&
      accountSubjectClassCode == that.accountSubjectClassCode &&
      behaviorTypeCode == that.behaviorTypeCode &&
      isOrgOfficialAccountNom == that.isOrgOfficialAccountNom &&
      isFundsIndex == that.isFundsIndex &&
      subjectLifeCycle == that.subjectLifeCycle &&
      operationInductionId == that.operationInductionId &&
      operateTime == that.operateTime
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      accountSubjectld,
      accountSubjectCode,
      accountSubjectName,
      accountSubjectType,
      incomeExpensesType,
      accountSubjectClassCode,
      behaviorTypeCode,
      isOrgOfficialAccountNom,
      isFundsIndex,
      subjectLifeCycle,
      operationInductionId,
      operateTime
    );
  }

}
